﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel;
using System.Diagnostics;

namespace OutoLiiga
{
    [Serializable]
    public class Pelaaja : INotifyPropertyChanged
    {
        public Pelaaja()
        {
            Etunimi = "";
            Sukunimi = "";
            Siirtohinta = 0;
            Seura = "";
        }

        public Pelaaja(string etunimi, string sukunimi, decimal siirtohinta, string seura)
        {
            Etunimi = etunimi;
            Sukunimi = sukunimi;
            Siirtohinta = siirtohinta;
            Seura = seura;
        }

        #region Properties

        string etunimi;
        public string Etunimi
        {
            get { return etunimi; }
            set
            {
                SetField(ref etunimi, value, "Etunimi");
                OnPropertyChanged("KokoNimi");
            }
        }

        string sukunimi;
        public string Sukunimi
        {
            get { return sukunimi; }
            set
            {
                SetField(ref sukunimi, value, "Sukunimi");
                OnPropertyChanged("KokoNimi");
            }
        }

        public string KokoNimi
        {
            get { return Sukunimi + " " + Etunimi; }
        }

        decimal siirtohinta;
        public decimal Siirtohinta
        {
            get { return siirtohinta; }
            set { SetField(ref siirtohinta, value, "Siirtohinta"); }
        }

        string seura;
        public string Seura
        {
            get { return seura; }
            set { SetField(ref seura, value, "Seura"); }
        }

        #endregion

        public override string ToString()
        {
            return string.Format("{0} {1}, {2}", Sukunimi, Etunimi, Seura);
        }

        #region INotifyPropertyChanged interface 

        [field: NonSerializedAttribute()]
        public event PropertyChangedEventHandler PropertyChanged;

        protected void OnPropertyChanged(string propertyName)
        {
            if (PropertyChanged != null)
                PropertyChanged(this, new PropertyChangedEventArgs(propertyName));

            Trace.TraceInformation("{0} changed", propertyName);
        }

        protected void SetField<T>(ref T field, T value, string propertyName)
        {
            if (EqualityComparer<T>.Default.Equals(field, value))
                return;

            field = value;

            Trace.TraceInformation("{0} set to {1}", propertyName, value);

            OnPropertyChanged(propertyName);
        }

        #endregion
    }
}
